﻿//Install Visual T4 for syntax highlighting!
//http://visualstudiogallery.msdn.microsoft.com/40a887aa-f3be-40ec-a85d-37044b239591



using System;

namespace Sponsorship.Domain.Persons
{
		
    public sealed class EnterPerson : ICommand
    {
        public Guid PersonId { get; private set; }
        public string FirstName { get; private set; }
        public string LastName { get; private set; }
        public Nullable<DateTime> DateOfBirth { get; private set; }
        public string TelephoneNumber { get; private set; }
        public SponsoringStatus Status { get; private set; }
        public string Comment { get; private set; }
        
        public EnterPerson () {}
        public EnterPerson (Guid personId, string firstName, string lastName, Nullable<DateTime> dateOfBirth, string telephoneNumber, SponsoringStatus status, string comment)
        {
            PersonId = personId;
            FirstName = firstName;
            LastName = lastName;
            DateOfBirth = dateOfBirth;
            TelephoneNumber = telephoneNumber;
            Status = status;
            Comment = comment;
        }
    }
    
    public sealed class PersonEntered : Event
    {
        public Guid PersonId { get; private set; }
        public string FirstName { get; private set; }
        public string LastName { get; private set; }
        public Nullable<DateTime> DateOfBirth { get; private set; }
        public string TelephoneNumber { get; private set; }
        public SponsoringStatus Status { get; private set; }
        public string Comment { get; private set; }
        
        public PersonEntered () {}
        public PersonEntered (Guid personId, string firstName, string lastName, Nullable<DateTime> dateOfBirth, string telephoneNumber, SponsoringStatus status, string comment)
        {
            PersonId = personId;
            FirstName = firstName;
            LastName = lastName;
            DateOfBirth = dateOfBirth;
            TelephoneNumber = telephoneNumber;
            Status = status;
            Comment = comment;
        }
    }
    
    public sealed class ChangePerson : ICommand
    {
        public Guid PersonId { get; private set; }
        public int Version { get; private set; }
        public string FirstName { get; private set; }
        public string LastName { get; private set; }
        public Nullable<DateTime> DateOfBirth { get; private set; }
        public string TelephoneNumber { get; private set; }
        public SponsoringStatus Status { get; private set; }
        public string Comment { get; private set; }
        
        public ChangePerson () {}
        public ChangePerson (Guid personId, int version, string firstName, string lastName, Nullable<DateTime> dateOfBirth, string telephoneNumber, SponsoringStatus status, string comment)
        {
            PersonId = personId;
            Version = version;
            FirstName = firstName;
            LastName = lastName;
            DateOfBirth = dateOfBirth;
            TelephoneNumber = telephoneNumber;
            Status = status;
            Comment = comment;
        }
    }
    
    public sealed class PersonChanged : Event
    {
        public Guid PersonId { get; private set; }
        public string FirstName { get; private set; }
        public string LastName { get; private set; }
        public Nullable<DateTime> DateOfBirth { get; private set; }
        public string TelephoneNumber { get; private set; }
        public SponsoringStatus Status { get; private set; }
        public string Comment { get; private set; }
        
        public PersonChanged () {}
        public PersonChanged (Guid personId, string firstName, string lastName, Nullable<DateTime> dateOfBirth, string telephoneNumber, SponsoringStatus status, string comment)
        {
            PersonId = personId;
            FirstName = firstName;
            LastName = lastName;
            DateOfBirth = dateOfBirth;
            TelephoneNumber = telephoneNumber;
            Status = status;
            Comment = comment;
        }
    }
    
    public sealed class DeletePerson : ICommand
    {
        public Guid PersonId { get; private set; }
        public int Version { get; private set; }
        
        public DeletePerson () {}
        public DeletePerson (Guid personId, int version)
        {
            PersonId = personId;
            Version = version;
        }
    }
    
    public sealed class PersonDeleted : Event
    {
        public Guid PersonId { get; private set; }
        
        public PersonDeleted () {}
        public PersonDeleted (Guid personId)
        {
            PersonId = personId;
        }
    }
    
    public sealed class EnterPersonAssociation : ICommand
    {
        public Guid PersonId { get; private set; }
        public int Version { get; private set; }
        public Guid PersonAssociationId { get; private set; }
        public Guid AssociatedPersonId { get; private set; }
        public Guid PersonAssociationTemplateId { get; private set; }
        public string AssociationName { get; private set; }
        public string Comment { get; private set; }
        
        public EnterPersonAssociation () {}
        public EnterPersonAssociation (Guid personId, int version, Guid personAssociationId, Guid associatedPersonId, Guid personAssociationTemplateId, string associationName, string comment)
        {
            PersonId = personId;
            Version = version;
            PersonAssociationId = personAssociationId;
            AssociatedPersonId = associatedPersonId;
            PersonAssociationTemplateId = personAssociationTemplateId;
            AssociationName = associationName;
            Comment = comment;
        }
    }
    
    public sealed class PersonAssociationEntered : Event
    {
        public Guid PersonId { get; private set; }
        public Guid PersonAssociationId { get; private set; }
        public Guid AssociatedPersonId { get; private set; }
        public Guid PersonAssociationTemplateId { get; private set; }
        public string AssociationName { get; private set; }
        public string Comment { get; private set; }
        
        public PersonAssociationEntered () {}
        public PersonAssociationEntered (Guid personId, Guid personAssociationId, Guid associatedPersonId, Guid personAssociationTemplateId, string associationName, string comment)
        {
            PersonId = personId;
            PersonAssociationId = personAssociationId;
            AssociatedPersonId = associatedPersonId;
            PersonAssociationTemplateId = personAssociationTemplateId;
            AssociationName = associationName;
            Comment = comment;
        }
    }
    
    public sealed class ChangePersonAssociation : ICommand
    {
        public Guid PersonId { get; private set; }
        public int Version { get; private set; }
        public Guid PersonAssociationId { get; private set; }
        public Guid AssociatedPersonId { get; private set; }
        public Guid PersonAssociationTemplateId { get; private set; }
        public string AssociationName { get; private set; }
        public string Comment { get; private set; }
        
        public ChangePersonAssociation () {}
        public ChangePersonAssociation (Guid personId, int version, Guid personAssociationId, Guid associatedPersonId, Guid personAssociationTemplateId, string associationName, string comment)
        {
            PersonId = personId;
            Version = version;
            PersonAssociationId = personAssociationId;
            AssociatedPersonId = associatedPersonId;
            PersonAssociationTemplateId = personAssociationTemplateId;
            AssociationName = associationName;
            Comment = comment;
        }
    }
    
    public sealed class PersonAssociationChanged : Event
    {
        public Guid PersonId { get; private set; }
        public Guid PersonAssociationId { get; private set; }
        public Guid AssociatedPersonId { get; private set; }
        public Guid PersonAssociationTemplateId { get; private set; }
        public string AssociationName { get; private set; }
        public string Comment { get; private set; }
        
        public PersonAssociationChanged () {}
        public PersonAssociationChanged (Guid personId, Guid personAssociationId, Guid associatedPersonId, Guid personAssociationTemplateId, string associationName, string comment)
        {
            PersonId = personId;
            PersonAssociationId = personAssociationId;
            AssociatedPersonId = associatedPersonId;
            PersonAssociationTemplateId = personAssociationTemplateId;
            AssociationName = associationName;
            Comment = comment;
        }
    }
    
    public sealed class DeletePersonAssociation : ICommand
    {
        public Guid PersonId { get; private set; }
        public int Version { get; private set; }
        public Guid PersonAssociationId { get; private set; }
        
        public DeletePersonAssociation () {}
        public DeletePersonAssociation (Guid personId, int version, Guid personAssociationId)
        {
            PersonId = personId;
            Version = version;
            PersonAssociationId = personAssociationId;
        }
    }
    
    public sealed class PersonAssociationDeleted : Event
    {
        public Guid PersonId { get; private set; }
        public Guid PersonAssociationId { get; private set; }
        
        public PersonAssociationDeleted () {}
        public PersonAssociationDeleted (Guid personId, Guid personAssociationId)
        {
            PersonId = personId;
            PersonAssociationId = personAssociationId;
        }
    }
    
    public sealed class SuggestPresent : ICommand
    {
        public Guid PersonId { get; private set; }
        public int Version { get; private set; }
        public Guid SuggestedPresentId { get; private set; }
        public Guid PresentTemplateId { get; private set; }
        public PresentData PresentData { get; private set; }
        public string Comment { get; private set; }
        
        public SuggestPresent () {}
        public SuggestPresent (Guid personId, int version, Guid suggestedPresentId, Guid presentTemplateId, PresentData presentData, string comment)
        {
            PersonId = personId;
            Version = version;
            SuggestedPresentId = suggestedPresentId;
            PresentTemplateId = presentTemplateId;
            PresentData = presentData;
            Comment = comment;
        }
    }
    
    public sealed class PresentSuggested : Event
    {
        public Guid PersonId { get; private set; }
        public Guid SuggestedPresentId { get; private set; }
        public Guid PresentTemplateId { get; private set; }
        public PresentData PresentData { get; private set; }
        public string Comment { get; private set; }
        
        public PresentSuggested () {}
        public PresentSuggested (Guid personId, Guid suggestedPresentId, Guid presentTemplateId, PresentData presentData, string comment)
        {
            PersonId = personId;
            SuggestedPresentId = suggestedPresentId;
            PresentTemplateId = presentTemplateId;
            PresentData = presentData;
            Comment = comment;
        }
    }
    
    public sealed class ChangeSuggestedPresent : ICommand
    {
        public Guid PersonId { get; private set; }
        public int Version { get; private set; }
        public Guid SuggestedPresentId { get; private set; }
        public Guid PresentTemplateId { get; private set; }
        public PresentData PresentData { get; private set; }
        public string Comment { get; private set; }
        
        public ChangeSuggestedPresent () {}
        public ChangeSuggestedPresent (Guid personId, int version, Guid suggestedPresentId, Guid presentTemplateId, PresentData presentData, string comment)
        {
            PersonId = personId;
            Version = version;
            SuggestedPresentId = suggestedPresentId;
            PresentTemplateId = presentTemplateId;
            PresentData = presentData;
            Comment = comment;
        }
    }
    
    public sealed class SuggestedPresentChanged : Event
    {
        public Guid PersonId { get; private set; }
        public Guid SuggestedPresentId { get; private set; }
        public Guid PresentTemplateId { get; private set; }
        public PresentData PresentData { get; private set; }
        public string Comment { get; private set; }
        
        public SuggestedPresentChanged () {}
        public SuggestedPresentChanged (Guid personId, Guid suggestedPresentId, Guid presentTemplateId, PresentData presentData, string comment)
        {
            PersonId = personId;
            SuggestedPresentId = suggestedPresentId;
            PresentTemplateId = presentTemplateId;
            PresentData = presentData;
            Comment = comment;
        }
    }
    
    public sealed class DeleteSuggestedPresent : ICommand
    {
        public Guid PersonId { get; private set; }
        public int Version { get; private set; }
        public Guid SuggestedPresentId { get; private set; }
        
        public DeleteSuggestedPresent () {}
        public DeleteSuggestedPresent (Guid personId, int version, Guid suggestedPresentId)
        {
            PersonId = personId;
            Version = version;
            SuggestedPresentId = suggestedPresentId;
        }
    }
    
    public sealed class SuggestedPresentDeleted : Event
    {
        public Guid PersonId { get; private set; }
        public Guid SuggestedPresentId { get; private set; }
        
        public SuggestedPresentDeleted () {}
        public SuggestedPresentDeleted (Guid personId, Guid suggestedPresentId)
        {
            PersonId = personId;
            SuggestedPresentId = suggestedPresentId;
        }
    }

}